package com.net.orders.service;

import com.caikun.model.common.PageResult;
import com.caikun.model.dto.OrderPageDTO;
import com.caikun.model.dto.OrderSubmitDTO;
import com.caikun.model.entity.Order;
import com.caikun.model.vo.OrderTimeVo;
import com.caikun.model.vo.OrderVo;
import com.github.pagehelper.Page;

import java.util.List;
import java.util.Map;

/**
 * 订单表(Order)表服务接口
 *
 * @author makejava
 * @since 2025-07-17 08:53:21
 */
public interface OrderService {

    /**
     * 通过ID查询单条数据
     *
     * @param orderId 主键
     * @return 实例对象
     */
    OrderVo queryById(Integer orderId);

    /**
     * 条件分页查询
     * @param orderPageDTO
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageResult<OrderVo> queryByPage(OrderPageDTO orderPageDTO, int pageNum, int pageSize);

    /**
     * 新增数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    Order insert(Order order);

    /**
     * 修改数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    Order update(Order order);

    /**
     * 通过主键删除数据
     *
     * @param orderId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer orderId);

    /**
     * 提交订单（从购物车获取订单服务详情）
     *
     * @param orderSubmitDTO 提交订单参数
     * @return 订单信息
     */
    Map<String, Object> submit(OrderSubmitDTO orderSubmitDTO);

    /**
     * 通过用户ID查询订单列表
     *
     * @param userId 用户ID
     * @return 订单列表
     */
    List<OrderVo> queryByUserId(Integer userId);

    /**
     * 获取用户正在使用的订单
     * @param userId
     * @return
     */
    public OrderTimeVo getUserOrderByStatus(Integer userId);

    /**
     * 设置订单结束时间
     * @param orderId
     * @return
     */
    Boolean setOverTime(Integer orderId);

    /**
     * 设置订单状态
     * @param orderId
     * @param status
     * @return
     */
    Boolean setOrderStatus(Integer orderId, Integer status);
}
